#!/usr/bin/env python
# -*- coding:utf-8 -*-

# file:do_iter2.py
# author: 马国鑫
# datetime:2022/4/7 15:51
# software: PyCharm

"""
this is function  description 
"""


# import module your need

# 迭代器应用：自定义列表
# 创建可迭代对象，一个是创造自定义迭代器

# 可迭代对象
class MyList(object):
    def __init__(self):
        # 定义实例属性保存数据
        self.items = []
        pass

    def __iter__(self):
        """提供迭代器对象"""
        mylist_Iterator = MyListIterator(self.items)
        return mylist_Iterator

    def addItem(self, data):
        # 追加保存内容
        self.items.append(data)
        print(self.items)


# 自定义迭代器
class MyListIterator(object):
    def __init__(self, items):
        # 传参
        self.items = items
        # 记录迭代器的迭代位置
        self.current_index = 0

    def __iter__(self):
        """提供迭代方法"""
        pass

    def __next__(self):
        """获取到下一个元素"""
        # 判断当前下标是否越界
        if self.current_index < len(self.items):
            # 根据下标获取元素值
            data = self.items[self.current_index]
            # 下标+1
            self.current_index += 1
            # 返回下标对应的数字
            return data
        # 越界抛出异常
        else:
            # raise主动报异常
            raise StopIteration


if __name__ == '__main__':
    my_list = MyList()
    my_list.addItem("张飞")
    my_list.addItem("xm")
    my_list.addItem("mgx")

    # 遍历的本质是:
    # 1.iter(my_list) 获取my_list对象的迭代器
    # 2.next(迭代器)获取下一个元素  -->会调用我们迭代器对象的next方法
    # 3.捕获异常
    for value in my_list:
        print("name:", value)
